package com.ying.tests.CCCbasis;

import java.util.HashMap;
import java.util.Map;

public class Test2HashMap {

    public static void main(String[] args) {
        Map<Object, Object> map = new HashMap(){{
            put(1, "小A");
            put(2, "小B");
            put(3, "小C");
        }};
        System.out.println(map);
//        test1(map);                        // putIfAbsent()，该键存在则不新增，不修改，不存在新增
//        test2(map);                        // getOrDefault()，根据键获取值，有则获取，没有则获取默认值
//        test3(map);                        // merge()，该键存在则可以修改值，不存在新增键值，值可以自定义
//        test4(map);                        // compute()，该键存在则可以修改值，不存在则添加进去，但值是null
//        test5(map);                        // computeIfAbsent()，该键不存在则添加值，存在则无改动
//        test6(map);                        // computeIfPresent()，该键存在则修改值，不存在则无改动

    }

    // putIfAbsent()，该键存在则不新增，不修改，不存在新增
    private static void test1(Map<Object, Object> map) {
        map.putIfAbsent(4, "小D");
        System.out.println(map);
        map.putIfAbsent(2, "小D");
        System.out.println(map);
    }

    // getOrDefault()，根据键获取值，有则获取，没有则获取默认值
    private static void test2(Map<Object, Object> map) {
        System.out.println(map.getOrDefault(5, "我找不到呀"));
    }

    // merge()，该键存在则可以修改值，不存在新增键值，值可以自定义
    private static void test3(Map<Object, Object> map) {
        map.merge(4, "小AAA", (oldValue, newValue) -> oldValue + "/" + newValue);
        System.out.println(map);
    }

    // compute()，该键存在则可以修改值，不存在则添加进去，但值是null
    private static void test4(Map<Object, Object> map) {
        map.compute(4, (key, value) -> value + "Aa");
        System.out.println(map);
    }

    // computeIfAbsent()，该键不存在则添加值，存在则无改动
    private static void test5(Map<Object, Object> map) {
        Object o = map.computeIfAbsent(4, value -> "Aa");
        System.out.println(o);
        System.out.println(map);
    }

    // computeIfPresent()，该键存在则修改值，不存在则无改动
    private static void test6(Map<Object, Object> map) {
        map.computeIfPresent(4, (key, value) -> value + "Aa");
        System.out.println(map);
    }

}
